// require("./task/code03/app.js")
// require("./task/code02.js")
// require("./task/code01.js")

//引用自定义的Promise
const MyPromise = require("./code04.js")
//MyPromise构造器接收一个回调函数，该回调函数以resolve和reject两个方法为参数
//resolve和reject方法用于改变Promise实例的状态，所以要给MyPromise的实例加个状态
let promise = new MyPromise((resolve,reject)=>{
    //异步执行
    // setTimeout(()=>{
        resolve("成功....")
    // },2000)
    //有异步代码时，不能同时存在
    // throw "exectuor error"
    reject("失败")
})
let p2 = new MyPromise((resolve,reject)=>{
    setTimeout(()=>{
        resolve("p2 success")
    },2000)
})
//调用then方法
promise.then((value)=>{
    console.log(value,1)
},(error)=>{
    console.log(error)
})
//多次调用then方法,只返回最后一次，所以需要修改MyPromise
promise.then((value)=>{
    console.log(value,2)
})
//链式调用
let p1 = promise.then((value)=>{
    console.log(value,3)
    return 100
}).then((value)=>{
    console.log(value,4)
    return 200
}).then(value => {console.log(value,5)})
//处理异常
promise.then((value)=>{
    console.log(value,6)
    throw Error("1234")
})
    .then()
    .then()
    .then()
    .then()
    // .then((value)=> value,(e)=>{console.log(e,7);return 888})
    .catch((e)=>{console.log(e,9);return 888})//catch中return使下一个MyPromise恢复成功resolve
    .then(value=>{
        console.log(value,10);
        throw "error 10"
        // return "success 10"
    })
    .finally(()=>{
        console.log("finally",11)
        return p2//这个返回值，不是要传递的值，需要传递的是上一个then的return或throw的值,
        //只有返回MyPromise时才生效。。。。
    })
    .then((value)=>{
        console.log(value,12)
    },(reason)=>{
        console.log(reason,13)
    })
//测试all方法
// MyPromise.all([MyPromise.resolve(111),MyPromise.reject(222),1,2,3]).then((value)=>{
// MyPromise.all([MyPromise.resolve(111),1,2,3]).then((value)=>{
MyPromise.all().then((value)=>{
    console.log(value,14)
},(reason)=>{
    console.log(reason,15)
})

MyPromise.race([MyPromise.resolve(222),1]).then(value => console.log(value,16),value => console.log(value,17))
